package com.lbs;

import java.lang.reflect.Field;

import com.lbs.core.shared.tables.AbstractData;

/**
 * Clase Abstracta que permite que cualquier clase que la herede 
 * se pueda convertir en un AbstractData.
 * 
 * @author Alberto Sandoval Sotelo Domingo 26/Agosto/2012
 *
 */
public abstract class LbsAbstractable {

	/***
	 * Por medio de Reflection, obtenemos todas las propiedades de la clase y 
	 * se van agregando los valores de las mismas a un AbstractData, que se regresa
	 * como resultado.
	 * 
	 * 
	 * @return La clase y todos sus campos y valores en forma de AbstractData.
	 */
	@SuppressWarnings("rawtypes")
	public AbstractData getAsAbstractData(){
		AbstractData ad = new AbstractData();
		Class clase = this.getClass();
		Field[] fields = clase.getDeclaredFields();
		if (fields.length==0){
			clase = this.getClass().getSuperclass();
			fields = clase.getDeclaredFields();
		}
		
		//Se recorren todos los fields del objet
		try {
			for (Field field : fields){
					if (field.get(this)!=null){
						ad.add(field.getName(), field.get(this));
					}
			}
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			//El metodo es Private no lo procesamos
		}
		
		return ad;
	}
}
